/* eslint valid-jsdoc: "off" */

/**
 * @param {Egg.EggAppInfo} appInfo app info
 */
module.exports = appInfo => {
  /**
   * built-in config
   * @type {Egg.EggAppConfig}
   **/
  const config = (exports = {});

  // use for cookie sign key, should change to your own and keep security
  config.keys = appInfo.name + "_1732634473393_4479";

  // 权限控制
  config.jwt = {
    secret: "165165", //任意的字符
  };
  // 配置 gzip 中间件的配置
  // config.gzip = {
  //   threshold: 1024, // 小于 1k 的响应体不压缩
  // };
  // 框架默认中间件（会将文件名中的分隔符都转换为驼峰形式的变量名）
  // config.bodyParser = {
  //   // 通用配置项：enable, match, ignore
  //   // enable: false, // 控制中间件是否开启
  //   // match: '', // 设置只有符合某些规则的请求才会经过这个中间件。 例：/static，只针对 /static 前缀开头的 url 请求开启。也可以是一个函数
  //   // ignore: false, // 设置符合某些规则的请求不经过这个中间件
  //   jsonLimit: "10mb",
  // };
  // 全局添加中间件，数组顺序即为中间件的加载顺序（如果需要局部添加，则在router路由中添加）
  config.middleware = []; // ['jwt', 'gzip']

  config.security = {
    csrf: {
      enable: false,
      headerName: "x-csrf-token", // 通过 header 传递 CSRF token 的默认字段为 x-csrf-token
      // useSession: false, // 默认为 false，当设置为 true 时，将把 csrf token 保存到 Session 中
      // cookieName: "csrfToken", // Cookie 中的字段名，默认为 csrfToken
      // sessionName: "csrfToken", // Session 中的字段名，默认为 csrfToken
      // ignoreJSON: true, // 默认为 false，设置为 true 时，会忽略所有 content-type 为 `application/json` 的请求
    },
  };

  /**
   * Cookie配置
   */
  config.cookies = {
    // httpOnly: true | false,
    // sameSite: 'none|lax|strict',
  };

  config.session = {
    key: "EGG_SESS", // 设置session cookie里面的key ;承载 Session 的 Cookie 键值对名字
    maxAge: 1000 * 3600 * 24, //过期时间（默认1000*3600*24，即一天）
    httpOnly: true, //仅允许服务端获取,不允许js获取（默认true）
    encrypt: true, //是否加密（默认true）
    renew: true, //是否每次刷新页面时 session都会被延期（默认true）
  };

  /**
   * 文件发送：两种模式，Stream，File
   */
  config.multipart = {
    mode: "file",
    // fileExtensions: [".apk"], // 新增支持的文件扩展名
    // whitelist: [".png"], // 覆盖整个白名单，只允许上传 '.png' 格式
  };

  // 配置服务器基本信息
  config.cluster = {
    listen: {
      path: "",
      port: 7003,
      hostname: "localhost", // 默认localhost和ip地址,上线时用0.0.0.0
    },
  };
  /**
   * 配置mysql数据库信息
   * 文件所在位置：C:\Program Files\MySQL\MySQL Server 8.0
   * 服务名称：MySql
   */
  config.mysql = {
    //单数据库信息配置
    client: {
      host: "localhost",
      port: "3306",
      user: "root",
      password: "fanlichuan",
      database: "easy_note", // im_v1
      multipleStatements: true, // 支持执行多条 sql 语句
    },
    app: true, // 是否加载到app上(默认true)
    agent: false, // 是否加载到agent上(默认false)
  };

  //跨域配置
  config.cors = {
    // 注意坑点：如果设为127.0.0.0:5180 会导致找不到
    // origin: "*", //匹配规则  域名+端口  *则为全匹配   http://localhost:8080
    // origin: "http://localhost:5180", //匹配规则  域名+端口  *则为全匹配   http://localhost:8080
    origin: "http://localhost:3010", //匹配规则  域名+端口  *则为全匹配   http://localhost:8080
    allowMethods: "GET,HEAD,PUT,POST,DELETE,PATCH",
    credentials: true, //携带凭证   加上才能共享跨域session，同时前端ajax请求也要加上响应的参数
  };

  // add your user config here
  const userConfig = {
    // myAppName: 'egg',
  };

  /***
   * redis 缓存（可能后续会弃用）
   */
  // config.redis = {
  //   clients: {
  //     session: { host: "127.0.0.1", port: "7003", password: "", db: "11" },
  //     cache: { host: "127.0.0.1", port: "7003", password: "", db: "12" },
  //   },
  // };
  // config.sessionRedis = { name: "session" }; // 选择使用哪个Redis配置存储session

  return {
    ...config,
    ...userConfig,
  };
};
